//
//  HMUserLoginViewModel.swift
//  GuoGuo
//
//  Created by 艾小新 on 16/8/5.
//  Copyright © 2016年 xiaoxin. All rights reserved.
//

import UIKit

class HMUserLoginViewModel: NSObject {
    
    
    // 计算性属性
    var userLogin: Bool {
        
        // 当有accesstoken并且没有过期的时候就是登陆状态   
        if self.accessToken != nil && !self.isExpiresIn {
            return true
        }
        return false
    }
    
    
    var accessToken: String? {
        return account?.access_token
    }
    
    
    
    // 判断当前帐户的accessToken是否过期,如果过期return true/ 否则 false
    var isExpiresIn: Bool {
        // 拿着过期时间与当前时间进行对比,如果当前时间小于过期时间 就 没有过期,那就返回 false
        if NSDate().compare(account!.expiresDate!) == .OrderedAscending {
            return false
        }
        return true
    }
    
    
    
    // 当前视图模型
    var account: HMOAuthModel? {
        
        didSet {
        }
        
    }
    

    
    // 单例
    static let sharedUserLoginViewModel :HMUserLoginViewModel = {
            let vm = HMUserLoginViewModel()
            vm.account = vm.loadAccount()
            return vm
        }()

    
    // 抽取控制器代码
    func loadToken(code: String, callback:((isSuccess: Bool)->())) {
        
        
        let parameters = [
            
            "client_id" : WB_APPKEY,
            "client_secret" : WB_APPSECRET,
            "grant_type" : "authorization_code",
            "code" : code,
            "redirect_uri" : WB_REDIRECTURI
        ]
        
        // 拿code换token
        HMNetworkTools.sharedTools.requestData(.POST, urlString: "https://api.weibo.com/oauth2/access_token", parameter: parameters, callBack: { (returnData, errors) in
            
            // 回调
            if errors != nil {
                print("访问失败")
            callback(isSuccess: false)
                return
            }
            
            // 走下来就说明 访问成功 访问成功就不接下来回调了
            
            let data = returnData as? [String:AnyObject]
            
            // 字典转模型
            let oath = HMOAuthModel(dict: data!)
            
            // 拿到access_token后，拿取部分用户信息
            self.loadUserInfo(oath,callback:callback)
  
            
        })
    }
    
    func loadUserInfo(oath:HMOAuthModel,callback:((isSuccess: Bool)->())){
        
        let para = ["access_token":oath.access_token!,"uid":oath.uid!]
        
        HMNetworkTools.sharedTools.requestData(.GET, urlString: "https://api.weibo.com/2/users/show.json", parameter:para ) { (returnData, errors) in
            
            if errors != nil {
                
                print("加载个人信息失败")
                callback(isSuccess: false)
                return
            }
            // 把模型补全
            oath.screen_name = returnData!["screen_name"] as? String
            oath.avatar_large = returnData!["avatar_large"] as? String
            
            // 第一次赋值
            self.account = oath
            print(self.account)
            
            // 归档 保存模型 让程序进来能拿到值
            // 归档的路径
            NSKeyedArchiver.archiveRootObject(oath, toFile: self.archiveFile)
            callback(isSuccess: true)

            
        }
        
        
    }
    
    // 归档与解档路径
    private let archiveFile = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
    
    
    // 解档
    private func loadAccount() -> HMOAuthModel? {
        return NSKeyedUnarchiver.unarchiveObjectWithFile(archiveFile) as? HMOAuthModel
    }
    
    // 保存用户信息
    private func saveUserAccount(account: HMOAuthModel) {
        NSKeyedArchiver.archiveRootObject(account, toFile: archiveFile)
    }
    
    
    
}
